/* 
使用 multer 解析表单数据
注意：使用 express.urlencoded() 中间件无法解析 multipart/form-data 格式的请求体数据。
当前项目，推荐使用 multer 来解析 multipart/form-data 格式的表单数据。https://www.npmjs.com/package/multer
*/

const path = require('path')
  //第1个函数 ：发布新文章  post   /my/article/add
// 发布新文章的处理函数
exports.addArticle = (req, res) => {
    //res.send('ok')
    //console.log(req.body) // 文本类型的数据
    console.log('--------分割线----------')
    console.log(req.file) // 文件类型的数据  //会在对应文件夹存一个文件，可以通过request.file（上传的是单个文件）或者request.files（上传的是多个同名文件）获取文件信息
  
     //res.send('ok')  

     //1.  手动判断是否上传了文章封面
    if (!req.file || req.file.fieldname !== 'cover_img') return res.cc('文章封面是必选参数！')

     //2.  TODO：表单数据合法，继续后面的处理流程...     
     //要插入数据库的文章信息对象
    const articleInfo = {
      // 标题、内容、状态、所属的分类Id
      ...req.body,
      // 文章封面在服务器端的存放路径
      cover_img: path.join('/uploads', req.file.filename),
      // 文章发布时间
      pub_date: new Date(),
      // 文章作者的Id
      authod_id: req.auth.id,   //authod_id数据库中的字段；req.auth.id即登录人-token里有相关id信息。
    }

    //3. 在数据库中更新文章
    const sql = `insert into ev_articles set ?`

    // 执行 SQL 语句
    db.query(sql, articleInfo, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
    
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('发布文章失败！')
    
        // 发布文章成功
        res.cc('发布文章成功', 0)
    })
  }  